GitHub ↗ ← 返回

The Year Windows was Never Meant to See.ass

Enderman/The Year Windows was Never Meant to See.assASS共 68 条字幕
样式信息 (2)
Newman-CN-4K
名称Newman-CN-4K字体Sarasa Fixed SC SemiBold字号125主色&H0055FFFF辅色&H000000FF描边色&H00FF43E4背景色&H00FF2FFF粗体0斜体0下划线0删除线0水平缩放100垂直缩放100间距0角度0边框样式1描边1.5阴影1.2对齐2左边距10右边距10垂直边距20编码1
Enderman-CN-C
名称Enderman-CN-C字体Sarasa Fixed SC SemiBold字号135主色&H0000EAFF辅色&H000000FF描边色&H00000000背景色&H00000000粗体0斜体0下划线0删除线0水平缩放100垂直缩放100间距0角度0边框样式1描边1.5阴影1对齐2左边距0右边距0垂直边距75编码1
#10:00:00.710:00:05.63Newman-CN-4K
{\blur10\fad(200,200)}翻译/压制/字幕制作:HAF半个水果
#20:00:06.460:00:11.33Enderman-CN-C
{\fad(200,200)\pos(1909.333,1869)}看透 Windows 时钟
#30:00:07.630:00:17.63Newman-CN-4K
{\blur10\fad(200,200)\pos(1962.667,1633.333)}使用AI工具翻译,如有不准确的地方请在弹幕或评论区指正,谢谢!
#40:00:12.510:00:22.76Enderman-CN-C
{\fad(200,200)\pos(1938.666,1829)}大家好!还记得那些 Windows 经典实验吗?
#50:00:12.510:00:22.76Enderman-CN-C
{\fad(200,200)\pos(1936,2130.333)}这个视频就要成为其中之一了。在本视频中,我将把 Windows 时钟推向其极限
#60:00:23.560:00:35.34Enderman-CN-C
{\fad(200,200)\pos(1922.667,1823.666)}所有长期关注我的用户都知道,通过在较新版本 Windows 系统的
#70:00:23.560:00:35.34Enderman-CN-C
{\fad(200,200)\pos(1922.667,2122.333)}boot.ini 或 BCD 中提供 /year 参数,完全有可能达到年份 10000
#80:00:35.880:00:47.19Enderman-CN-C
{\fad(200,200)\pos(1938.667,1826.333)}我成功完成了两次:一次在 Windows 2000 上,一次在 Windows 11 上
#90:00:35.880:00:47.19Enderman-CN-C
{\fad(200,200)\pos(1930.666,2125)}这是个相当有趣的实验,也是公认的经典操作,甚至在15年前就有人做过了
#100:00:48.990:01:04.09Enderman-CN-C
{\fad(200,200)\pos(1962.666,1831.667)}问题是——没人愿意深入探究。这里面的水真的很深
#110:00:48.990:01:04.09Enderman-CN-C
{\fad(200,200)\fs125\pos(1954.666,2119.667)}Windows 的理论日期和时间上限是多少?在日期和时间面板中,这个上限相当低
#120:01:05.160:01:22.49Enderman-CN-C
{\fad(200,200)\pos(1962.666,1831.667)}我们可以一直数到2100年,然后逐年递增,直到……我也不知道
#130:01:05.160:01:22.49Enderman-CN-C
{\fad(200,200)\pos(1949.333,2127.667)}这样尝试毫无意义,太慢了。然而,通过 date 命令,限制就会宽松得多
#140:01:23.460:01:37.23Enderman-CN-C
{\fad(200,200)\pos(1960,1829)}date 命令让我们可以穿越到更遥远的未来!
#150:01:23.460:01:37.23Enderman-CN-C
{\fad(200,200)\pos(1965.333,2127.667)}但9999年仍然遥不可及……那么它的极限究竟是多少呢?
#160:01:38.130:01:51.43Enderman-CN-C
{\fad(200,200)\pos(1984,1829)}实验表明,date 命令允许我们提供的最大年份是8907
#170:01:38.130:01:51.43Enderman-CN-C
{\fad(200,200)\pos(1965.333,2122.333)}但为什么会这样呢?是什么阻止我们设定更高的年份?
#180:01:53.990:02:07.26Enderman-CN-C
{\fad(200,200)\pos(1981.333,1845)}要确切回答这个问题,我们必须将调试器挂接到系统上
#190:01:53.990:02:07.26Enderman-CN-C
{\fad(200,200)\pos(1944,2122.333)}这需要对设置日期和时间的函数进行逆向工程
#200:02:16.430:02:18.09Enderman-CN-C
{\fs100\pos(1952,1445)}您系统上的时间或日期无效。请使用控制面板中的日期/时间正确设置您的系统时间和日期
#210:02:18.340:02:31.66Enderman-CN-C
{\fad(200,200)\pos(1962.667,1821)}在内核级别设置时间的过程是 {\c&HFFFFFF&}NtSetSystemTime()
#220:02:18.340:02:31.66Enderman-CN-C
{\fad(200,200)\fs99\pos(1920,2103.666)}Windows 使用一种名为 {\c&HFFFFFF&}SYSTEMTIME{\r\fs99} 的结构,该结构描述了 {\c&HFFFFFF&}FILETIME{\r\fs99},而 {\c&HFFFFFF&}FILETIME{\r\fs99} 是一种 {\c&HFFFFFF&}LARGE_INTEGER{\r}
#230:02:32.340:02:44.21Enderman-CN-C
{\fad(200,200)\pos(1933.333,1839.667)\fs106}简而言之,系统时间是一个有符号的64位整数,描述的是“自1601年1月1日以来每100纳秒的滴答数”
#240:02:32.340:02:44.21Enderman-CN-C
{\fad(200,200)\pos(1928,2130.334)}这意味着每增加一秒,计数器就增加1000万
#250:02:44.880:02:58.58Enderman-CN-C
{\fad(200,200)\pos(1957.333,1837.001)}更简单地说,存在一个增长极快的数字。这种方法的局限在于存储空间有限:
#260:02:44.880:02:58.58Enderman-CN-C
{\fad(200,200)\pos(1954.666,2114.334)}只有8字节(含1位符号位)。因此,Windows 时钟能表示的最大数值为2⁶³-1
#270:02:59.130:03:07.93Enderman-CN-C
{\fad(200,200)\pos(1959.999,1831.667)}更妙的是,微软官方已记录该问题,其支持的最大年份为30827年
#280:02:59.130:03:07.93Enderman-CN-C
{\fad(200,200)\pos(1938.666,2125)}这意味着当前版本的 Windows 系统将在公元30827年后基本停止正常运行
#290:03:08.440:03:16.43Enderman-CN-C
{\fad(200,200)\pos(1930.666,1834.333)}我们这些活着的人类,没有一个能活到30827年。考虑到最近发生的种种情况
#300:03:08.440:03:16.43Enderman-CN-C
{\fad(200,200)\pos(1922.666,2119.666)}Windows 可能也撑不到那一天。哦,对了,那是把我们挡在8907年之外的分支
#310:03:17.190:03:25.69Enderman-CN-C
{\fad(200,200)\fs125\pos(1943.999,1823.666)}这意味着:{\fs150\c&HFFFFFF&}如果{\r\fs125}你将日期和时间设置为高于0x20000000(8907年12月5日18:42:02)
#320:03:17.190:03:25.69Enderman-CN-C
{\fad(200,200)\fs125\pos(1685.332,2130.333)}{\fs150\c&HFFFFFF&}那么{\r\fs125}该日期无效。因此,这个时间点是正常安装情况下的理论极限
#330:03:17.190:03:25.69Enderman-CN-C
{\fad(200,200)\fs70\pos(3482.665,2125)}(Windows 11 同样适用!)
#340:03:26.430:03:37.73Enderman-CN-C
{\fad(200,200)\fs120\pos(1943.999,1831.666)}解决方案比看起来简单:jg 指令由两个字节组成,因此只需用 NOP 指令进行修补即可
#350:03:26.430:03:37.73Enderman-CN-C
{\fad(200,200)\fs120\pos(1943.999,2111.666)}也就是说,我们只需要将 7F 7D 覆盖为 90 90,就能在下次重启前解锁日期功能
#360:03:48.760:03:51.76Enderman-CN-C
{\pos(2216,1812)}* 在 X 上关注!
#370:03:57.630:04:05.59Enderman-CN-C
{\fad(200,200)\fs110\pos(1922.666,1834.333)}令人惊讶的是,现在确实可以正常工作了。我们现在可以自由设置任何年份为最多9999的日期
#380:03:57.630:04:05.59Enderman-CN-C
{\fad(200,200)\fs110\pos(1909.333,2106.333)}然而,日期工具具有额外的字符串验证功能,因此无法通过它设置五位数的年份
#390:04:13.010:04:23.43Enderman-CN-C
{\fad(200,200)\pos(1920,1834.333)}这就是为什么我创建了自己的控制面板工具,通过内核模式
#400:04:13.010:04:23.43Enderman-CN-C
{\fad(200,200)\fs120\pos(1904,2117)}驱动程序来控制日期和时间。它直接调用ZwSetSystemTime()函数,没有任何日期检查
#410:04:28.530:04:38.96Enderman-CN-C
{\fad(200,200)\pos(1920,1834.333)}此驱动程序已包含修补部分,因此无需进行任何 WinDbg 的辅助
#420:04:28.530:04:38.96Enderman-CN-C
{\fad(200,200)\pos(1941.333,2130.333)}Windows XP 是特殊的——它还有另一个门,但那是下个视频的内容
#430:04:29.760:04:38.96Enderman-CN-C
{\fs85\pos(2024,1634.333)}*汇编中 gate(门)是一种“受控的控制权转移机制”,用来安全地从一个特权级跳到另一个特权级,或者响应中断/异常*
#440:04:40.680:04:51.16Enderman-CN-C
{\fad(200,200)\pos(1917.333,1829)}既然我已经打了补丁,现在需要移除补丁以展示使用驱动程序的自动补丁功能
#450:04:52.710:04:56.56Enderman-CN-C
{\fs70\pos(1877.333,1533)}内核现在将接受任何日期值。这是一个实时的 ntoskrnl 补丁。在没有连接内核调试器的 64 位 Windows(Vista 及更高版本)上,PatchGuard 可能会引发 0x109(CRITICAL_STRUCTURE_CORRUPTION)错误检查。现在设置您的日期,然后恢复内核或还原快照
#460:05:03.410:05:06.78Enderman-CN-C
{\fad(200,200)\pos(1962.666,1863.666)}少女祈愿中(揭晓真相时刻...)
#470:05:08.110:05:14.91Enderman-CN-C
{\fad(200,200)\pos(1920,1834.333)}Windows XP 上前所未见的 10001 年。系统会立即卡死
#480:05:08.110:05:14.91Enderman-CN-C
{\fad(200,200)\pos(1914.666,2135.666)}但以一种奇怪的方式。它几乎像是在原有画面之上重绘
#490:05:39.510:05:47.91Enderman-CN-C
{\fad(200,200)\pos(1856,175.666)}结果发现,在日期工具中没有日期输出的门
#500:05:39.510:05:47.91Enderman-CN-C
{\fs124\fad(200,200)\pos(1909.333,487.666)}这很有趣,而且我们又得到了另一个确认,说明我们已经远远超出了允许的日期区间
#510:05:52.810:06:02.54Enderman-CN-C
{\fad(200,200)\pos(1973.333,1828.999)}现在,让我们继续看看当我们设置一个不可能的日期
#520:05:52.810:06:02.54Enderman-CN-C
{\fad(200,200)\pos(1944,2127.666)}比如30827年时会发生什么,我会打开很多应用程序来看看结果
#530:06:15.360:06:20.69Enderman-CN-C
{\fad(200,200)\pos(1941.333,1882.333)}看起来系统拒绝绘制窗口
#540:06:31.760:06:41.51Enderman-CN-C
{\fad(200,200)\pos(1946.666,1829)}它处于一个非常奇怪的状态,应用程序被冻结了,我无法控制它们
#550:06:31.760:06:41.51Enderman-CN-C
{\fad(200,200)\pos(1933.332,2119.666)}它们每分钟都在绘制,但另一方面,Alt + Tab 却能正常工作……
#560:06:59.110:07:12.13Enderman-CN-C
{\fad(200,200)\pos(1930.665,1831.666)}预定的任务没有运行,而当我准备重置机器时,屏幕上所有的应用程序都崩溃了
#570:07:13.410:07:26.78Enderman-CN-C
{\fad(200,200)\pos(1930.665,1831.666)}CPU使用率持续居高不下,即使所有应用程序都崩溃了
#580:07:13.410:07:26.78Enderman-CN-C
{\fad(200,200)\pos(1935.998,2124.999)}而现在,原生程序加载并显示,我们实际上已经进入遥远的未来
#590:07:32.890:07:48.01Enderman-CN-C
{\fad(200,200)\pos(1935.998,1831.665)}我决定在 Windows 登录凭证即将过期时尝试注销
#600:07:32.890:07:48.01Enderman-CN-C
{\fad(200,200)\pos(1914.665,2124.998)}看看是否可以在那里运行命令提示符,但没有成功
#610:08:09.390:08:17.71Enderman-CN-C
{\fad(200,200)\pos(1965.332,1815.665)}我还有几个甚至更疯狂的视频来用这个驱动程序,所以请保持关注!
#620:08:09.390:08:17.71Enderman-CN-C
{\fad(200,200)\pos(1919.999,2127.665)}我可能会在明天发布下一个视频!
#630:08:09.390:08:17.71Enderman-CN-C
{\fs23\fad(200,200)\pos(2771.999,2100.998)}然后又休息三个月(不)
#640:08:19.080:08:28.79Enderman-CN-C
{\fad(200,200)\pos(1925.332,1828.998)}感谢观看此视频!希望你喜欢
#650:08:19.080:08:28.79Enderman-CN-C
{\fad(200,200)\pos(1890.665,2124.998)}我会在我在所有 Windows 版本上充分测试该驱动程序后发布
#660:08:31.860:08:51.69Newman-CN-4K
{\blur10\fad(200,200)\fscx185\fscy188\pos(1919.999,718.666)}在 Youtube 上关注
#670:08:33.230:08:51.69Newman-CN-4K
{\blur10\fad(200,200)\pos(1925.333,1446.667)}原标题:The Year Windows was Never Meant to See 原作者:Enderman\N
原视频上传日期:2026年7月14日\N
翻译/压制/字幕制作:HAF半个水果\N
\N
字幕制作不易,喜欢的话支持一下我吧!
#680:08:40.060:08:48.33Newman-CN-4K
{\blur10\fad(200,200)}如果你喜欢这个视频,请多多支持和评论哒~ o((>ω< ))o